package com.aidex.biz.service.impl;

import java.util.List;

import com.aidex.biz.domain.Customer;
import com.aidex.biz.domain.PushRuleUser;
import com.aidex.biz.domain.XiansuoChengben;
import com.aidex.biz.domain.vo.GuanggaoChengBen;
import com.aidex.biz.domain.vo.HeJiGuanggaoChengBen;
import com.aidex.biz.domain.vo.HeJiZijianChengBen;
import com.aidex.biz.domain.vo.ZijianChengBen;
import com.aidex.biz.service.XiansuoChengbenService;
import com.aidex.common.annotation.DataScope;
import com.aidex.common.core.domain.BaseEntity;
import com.aidex.common.core.domain.entity.SysUser;
import com.aidex.common.core.page.PageDomain;
import com.aidex.common.utils.StringUtils;
import com.aidex.common.utils.sql.SqlUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.aidex.common.core.service.BaseServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.aidex.biz.mapper.XiansuoChengbenLogMapper;
import com.aidex.biz.domain.XiansuoChengbenLog;
import com.aidex.biz.service.XiansuoChengbenLogService;
import org.springframework.transaction.annotation.Transactional;
import com.aidex.common.utils.NumberUtils;

/**
 * 线索成本记录Service业务层处理
 *
 * @author sean
 * @email 2074844820@qq.com
 * @date 2025-03-24
 */
@Service
@Transactional(readOnly = true)
public class XiansuoChengbenLogServiceImpl extends BaseServiceImpl<XiansuoChengbenLogMapper, XiansuoChengbenLog> implements XiansuoChengbenLogService {
    private static final Logger log = LoggerFactory.getLogger(XiansuoChengbenLogServiceImpl.class);

    @Autowired
    private XiansuoChengbenService xiansuoChengbenService;

    /**
     * 获取单条数据
     *
     * @param xiansuoChengbenLog 线索成本记录
     * @return 线索成本记录
     */
    @Override
    public XiansuoChengbenLog get(XiansuoChengbenLog xiansuoChengbenLog) {
        XiansuoChengbenLog dto = super.get(xiansuoChengbenLog);
        return dto;
    }

    /**
     * 获取单条数据
     *
     * @param id 线索成本记录id
     * @return 线索成本记录
     */
    @Override
    public XiansuoChengbenLog get(String id) {
        XiansuoChengbenLog dto = super.get(id);
        return dto;
    }


    /**
     * 查询线索成本记录列表
     *
     * @param xiansuoChengbenLog 线索成本记录
     * @return 线索成本记录
     */
    @Override
    @DataScope(userAlias = "a", deptAlias = "a")
    public List<XiansuoChengbenLog> findList(XiansuoChengbenLog xiansuoChengbenLog) {
        return super.findList(xiansuoChengbenLog);
    }

    /**
     * 分页查询线索成本记录列表
     *
     * @param xiansuoChengbenLog 线索成本记录
     * @return 线索成本记录
     */
    @Override
    @DataScope(userAlias = "a", deptAlias = "a")
    public PageInfo<XiansuoChengbenLog> findPage(XiansuoChengbenLog xiansuoChengbenLog) {
        return super.findPage(xiansuoChengbenLog);
    }

    /**
     * 保存线索成本记录
     *
     * @param xiansuoChengbenLog
     * @return 结果
     */
    @Override
    public boolean save(XiansuoChengbenLog xiansuoChengbenLog) {
        return super.save(xiansuoChengbenLog);
    }

    /**
     * 根据城市、来源保存线索成本记录
     *
     * @param xiansuoChengbenLogParam
     * @return 结果
     */
    @Override
    public boolean saveByCityAndLaiyuan(XiansuoChengbenLog xiansuoChengbenLogParam) {
        try {
            // 保存线索成本记录
            String cityName = xiansuoChengbenLogParam.getCityName();
            if (cityName.endsWith("市")) {
                xiansuoChengbenLogParam.setCityName(cityName.substring(0, cityName.length() - 1));
            }
            xiansuoChengbenLogParam.setIsNewRecord();
            XiansuoChengben existXiansuoChengben = null;
            if (StringUtils.isNotNull(xiansuoChengbenLogParam.getCityName()) && StringUtils.isNotEmpty(xiansuoChengbenLogParam.getCityName())) {
                XiansuoChengben xiansuoChengben = new XiansuoChengben();
                xiansuoChengben.setCity(xiansuoChengbenLogParam.getCityName());
                xiansuoChengben.setLaiyuan(xiansuoChengbenLogParam.getLaiyuan());
                xiansuoChengben.setLaiyuanType(xiansuoChengbenLogParam.getLaiyuanType());
                existXiansuoChengben = xiansuoChengbenService.findExist(xiansuoChengben);
            } else {
                xiansuoChengbenLogParam.setRemark("客户城市未设置！");
            }

            if (null != existXiansuoChengben) {
                xiansuoChengbenLogParam.setCost(existXiansuoChengben.getAmount());
                xiansuoChengbenLogParam.setXscbId(existXiansuoChengben.getId());
            } else {
                xiansuoChengbenLogParam.setIsSum(0);
                xiansuoChengbenLogParam.setRemark("[" + xiansuoChengbenLogParam.getCityName() + "]-[" + xiansuoChengbenLogParam.getLaiyuan() + "]" + "的线索成本单价未设置！");
            }
            return this.save(xiansuoChengbenLogParam);
        } catch (Exception e) {
            return false;
        }
    }

    public boolean updateUserInfo(Customer customer, SysUser user) {
        try {
            XiansuoChengbenLog zscbLogParams = new XiansuoChengbenLog();
            zscbLogParams.setCustomerId(customer.getId());
            zscbLogParams.setLaiyuan(customer.getLaiyuan());
            zscbLogParams.setCityName(customer.getCityName());
            zscbLogParams.setLaiyuanType(customer.getLaiyuanType());
            List<XiansuoChengbenLog> xiansuoChengbenLogList = this.findList(zscbLogParams);
            if (null != xiansuoChengbenLogList && !xiansuoChengbenLogList.isEmpty()) {
                XiansuoChengbenLog xiansuoChengbenLog = xiansuoChengbenLogList.get(0);
                // 修改线索成本记录
                xiansuoChengbenLog.setUserId(user.getUserId());
                xiansuoChengbenLog.setUserName(user.getName());
                xiansuoChengbenLog.setDeptId(user.getDeptId());
                xiansuoChengbenLog.setDeptName(user.getDeptName());
                xiansuoChengbenLog.setCompanyId(user.getCompanyId());
                return this.save(xiansuoChengbenLog);
            }
            return false;
        } catch (Exception e) {
            return false;
        }
    }

    public boolean updateUserInfo(Customer customer, PushRuleUser user) {
        try {
            XiansuoChengbenLog zscbLogParams = new XiansuoChengbenLog();
            zscbLogParams.setCustomerId(customer.getId());
            zscbLogParams.setLaiyuan(customer.getLaiyuan());
            zscbLogParams.setCityName(customer.getCityName());
            zscbLogParams.setLaiyuanType(customer.getLaiyuanType());
            List<XiansuoChengbenLog> xiansuoChengbenLogList = this.findList(zscbLogParams);
            if (null != xiansuoChengbenLogList && !xiansuoChengbenLogList.isEmpty()) {
                XiansuoChengbenLog xiansuoChengbenLog = xiansuoChengbenLogList.get(0);
                // 修改线索成本记录
                xiansuoChengbenLog.setUserId(user.getUserId());
                xiansuoChengbenLog.setUserName(user.getName());
                xiansuoChengbenLog.setDeptId(user.getDeptId());
                xiansuoChengbenLog.setDeptName(user.getDeptName());
                xiansuoChengbenLog.setCompanyId(user.getCompanyId());
                return this.save(xiansuoChengbenLog);
            }
            return false;
        } catch (Exception e) {
            return false;
        }
    }


    /**
     * 删除线索成本记录信息
     *
     * @param xiansuoChengbenLog
     * @return 结果
     */
    @Override
    public boolean remove(XiansuoChengbenLog xiansuoChengbenLog) {
        return super.remove(xiansuoChengbenLog);
    }

    /**
     * 批量删除线索成本记录
     *
     * @param ids 需要删除的线索成本记录ID
     * @return 结果
     */
    @Transactional(readOnly = false)
    @Override
    public int deleteXiansuoChengbenLogByIds(String[] ids) {
        return mapper.deleteXiansuoChengbenLogByIds(ids);
    }

    /**
     * 获取最大编号
     *
     * @param xiansuoChengbenLog 线索成本记录
     * @return 结果
     */
    @Override
    public int findMaxSort(XiansuoChengbenLog xiansuoChengbenLog) {
        return NumberUtils.nextOrder(mapper.findMaxSort(xiansuoChengbenLog));
    }


    @Override
    @DataScope(userAlias = "a", deptAlias = "a")
    public PageInfo<GuanggaoChengBen> pageGuanggaoChengben(XiansuoChengbenLog xiansuoChengbenLog) {
        PageDomain page = xiansuoChengbenLog.getPage();
        Integer pageNum = page.getPageNum();
        Integer pageSize = page.getPageSize();
        if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) {
            String orderBy = SqlUtil.escapeOrderBySql(page.getOrderBy());
            Boolean reasonable = page.getReasonable();
            PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable);
        }
        return new PageInfo(mapper.guanggaochengben(xiansuoChengbenLog));
    }

    @Override
    @DataScope(userAlias = "a", deptAlias = "a")
    public HeJiGuanggaoChengBen hejiGuanggaochengben(XiansuoChengbenLog xiansuoChengbenLog) {
        return mapper.hejiGuanggaochengben(xiansuoChengbenLog);
    }

    @Override
    @DataScope(userAlias = "a", deptAlias = "a")
    public List<GuanggaoChengBen> guanggaoChengben(XiansuoChengbenLog xiansuoChengbenLog) {
        return mapper.guanggaochengben(xiansuoChengbenLog);
    }

    @Override
    public int updateNoCostData(XiansuoChengbenLog xiansuoChengbenLog) {
        return mapper.updateNoCostData(xiansuoChengbenLog);
    }
}
